package br.usp.ime.protoc.neuroimagem;

import java.util.HashSet;
import java.util.Iterator;

import com.google.gwt.user.client.rpc.IsSerializable;

import br.usp.ime.protoc.fujaba.FEmptyIterator;

public class MapaEstatistico implements IsSerializable
{
   private String arquivoImagemCerebral;

   public String getArquivoImagemCerebral()
   {
      return this.arquivoImagemCerebral;
   }

   public void setArquivoImagemCerebral(String value)
   {
      if (this.arquivoImagemCerebral != value)
      {
         
         this.arquivoImagemCerebral = value;
         
      }
   }

   private String arquivoTabela;

   public String getArquivoTabela()
   {
      return this.arquivoTabela;
   }

   public void setArquivoTabela(String value)
   {
      if (this.arquivoTabela != value)
      {
         
         this.arquivoTabela = value;
         
      }
   }

   private String data;

   public String getData()
   {
      return this.data;
   }

   public void setData(String value)
   {
      if (this.data != value)
      {
         
         this.data = value;
         
      }
   }

   private String observacoes;

   public String getObservacoes()
   {
      return this.observacoes;
   }

   public void setObservacoes(String value)
   {
      if (this.observacoes != value)
      {
         
         this.observacoes = value;
         
      }
   }

   /**
    * <pre>
    *                  1          has          1..* 
    * MapaEstatistico ------------------------------ Cluster
    *                  mapaEstatistico      cluster 
    * </pre>
    */
   private HashSet cluster;

   public boolean addToCluster(Cluster value)
   {
      boolean changed = false;
      if (value != null)
      {
         if (this.cluster == null)
         {
            this.cluster = new HashSet (); // or FTreeSet () or FLinkedList ()
         }
         
         changed = this.cluster.add (value);
         if (changed)
         {
            value.setMapaEstatistico (this);
         }
         
      }
      return changed;
   }

   public boolean hasInCluster(Cluster value)
   {
      return ((this.cluster != null) &&
              (value != null) &&
              this.cluster.contains (value));
   }

   public Iterator iteratorOfCluster()
   {
      return ((this.cluster == null)
              ? FEmptyIterator.get ()
              : this.cluster.iterator ());
   }

   public void removeAllFromCluster()
   {
      Cluster tmpValue;
      Iterator iter = this.iteratorOfCluster ();
      while (iter.hasNext ())
      {
         tmpValue = (Cluster) iter.next ();
         this.removeFromCluster (tmpValue);
      }
   }

   public boolean removeFromCluster(Cluster value)
   {
      boolean changed = false;
      if ((this.cluster != null) && (value != null))
      {
         
         changed = this.cluster.remove (value);
         if (changed)
         {
            value.setMapaEstatistico (null);
         }
         
      }
      return changed;
   }

   public int sizeOfCluster()
   {
      return ((this.cluster == null)
              ? 0
              : this.cluster.size ());
   }

   /**
    * <pre>
    *                  1..*            has             1 
    * MapaEstatistico ----------------------------------- GrupoAnalise
    *                  mapaEstatistico      grupoAnalise 
    * </pre>
    */
   private GrupoAnalise grupoAnalise;

   public GrupoAnalise getGrupoAnalise()
   {
      return this.grupoAnalise;
   }

   public boolean setGrupoAnalise(GrupoAnalise value)
   {
      boolean changed = false;
      if (this.grupoAnalise != value)
      {
         GrupoAnalise oldValue = this.grupoAnalise;
         
         if (this.grupoAnalise != null)
         {
            this.grupoAnalise = null;
            oldValue.removeFromMapaEstatistico (this);
         }
         this.grupoAnalise = value;
         if (value != null)
         {
            value.addToMapaEstatistico (this);
         }
         changed = true;
         
      }
      return changed;
   }

   public void removeYou()
   {
      removeAllFromCluster ();
      GrupoAnalise tmpGrupoAnalise = getGrupoAnalise ();
      if (tmpGrupoAnalise != null)
      {
         setGrupoAnalise (null);
      }
   }

}
